#!/usr/bin/python
"""Spisovatel.

Program spusti nasledovne:
  ./spisovatel.py --filename input_file --count number

Program nacita obsah zadaneho suboru, rozdeli ho na slova podobne ako words;
pouzi funkciu split().

Uloha je vytvorit dictionary writers_dict. Kluce v tomto dictionary budu
vsetky slova zo vstupneho suboru. Values budu vsetky slova ktore nasledovali
*hned* po danom slove. Na poradi values nezalezi a urobte to tak aby obsahovalo
duplikaty ak tam nejake su.

Cize ak moj vstupny subor obsahuje len tuto jednu vetu:
Toto je veta a veta i beta.

writers_dictionary bude vyzerat takto:
{
  '': ['toto'],
  'toto': ['je'],
  'je': ['veta'],
  'veta': ['a', 'i'],
  'a': ['veta'],
  'i': ['beta'],
}

Nezabudni, 'Toto' a 'toto' je rovnake slovo (cize prigram ma byt case
insensitive) a tak isto odignorujte bodky, ciarky, vykricniky, atd...

S tymto dictionary mozete teraz vcelku jednoducho tvorit nahodne texty ktore
budu vyzerat ako praca spisovatela. Vypiste slovo, potom pozrite v dictionary
ake slova mozu nasledovat za takym slovom, vyberte jedno nahodne, vypiste ho,
zase najdite slova co mozu nasledovat, atd ... Pouzite prazdny string ako prve
slovo ktorym zacnete tento vypis.

Pythonacka kniznica random obsahuje funkciu random.choice(list) ktora vam umozni
vybrat nahodny element listu.

Ako vystup ulohy vas program vypise tolko slov kolko uzivatel zada cez flag
--count.

Bonus uloha: urobte to tak aby program vzdy zalomil vystup po 70 znakoch.
Fun uloha: spustite tento program a ako vstupny subor mu dajte sameho seba.
"""
import optparse
import sys

def GetList(text):
  text = text.lower()
  word_list = text.split()
  return word_list

def MakeDict(word_list):
  writers_dict = {}
  first = ''
  for word in word_list:
    if first in writers_dict:
      writers_dict[first] = writers_dict[first] + [word]
    else:
      writers_dict[first] = [word]
    first = word
  writers_dict[first] = []
  a = writers_dict.items()
  print a[:20]
  return writers_dict

def main():
  """Function with which we execute actions in this module. """
  parser = optparse.OptionParser()
  parser.add_option('--filename', action='store', type='string', dest='filename',
    help='input file')
  parser.add_option('--count', action='store', type='int', dest='count',
    help='enter number')
  (options, unused_args) = parser.parse_args()
  try:
    input_file = open(options.filename, 'r')
  except IOError:
    print 'cannot open given file'
    sys.exit(1)
  text = input_file.read()
  word_list = GetList(text) 
  if options.filename:
    print MakeDict(word_list)
 

if __name__ == '__main__':
  main()
